// 作业代码文件
// 代码题 2

// 条件代码
const fp = require('lodash/fp')
// 数据
// horsepower 马力， dollar_value 价格， in_stock 库存

const cars = [
    {
        name: 'Ferrari FF',
        horsepower: 660,
        dollar_value: 700000,
        in_stock: true
    },
    {
        name: 'Spyker C12 Zagato',
        horsepower: 650,
        dollar_value: 648000,
        in_stock: false
    },
    {
        name: 'Jaguar XkR-S',
        horsepower: 550,
        dollar_value: 132000,
        in_stock: false
    },
    {
        name: 'Audi R8',
        horsepower: 525,
        dollar_value: 114200,
        in_stock: false
    },
    {
        name: 'Aston Martin One-77',
        horsepower: 750,
        dollar_value: 1850000,
        in_stock: true
    },
    {
        name: 'Pagani Huayra',
        horsepower: 700,
        dollar_value: 1300000,
        in_stock: false
    },
]


// 练习1 
// 原代码
let isLastInstock = function (cars) {
    // 获取最后一条数据
    let last_car = fp.last(cars)
    // 获取最后一条数据的 in_stock属性
    return fp.prop('in_stock', last_car)
}
// fp.flowRight() 改写
// fp.flowRight() 中 将 fp.prop() 和 fp.last() 进行合并 并进行柯里化
let isLastInstock2 = fp.flowRight(fp.prop('in_stock'),fp.last)



// 练习2 
// 使用fp.flowRight()、 fp.prop() 和 fp.first() 获取第一个car的name
let getFirstCarName = fp.flowRight(fp.prop('name'),fp.first)
// console.log(getFirstCarName(cars))




// 练习3
// 使用_average重构averageDollarValue
// 条件代码
let _average = function (xs) {
    return fp.reduce(fp.add, 0, xs) / xs.length
}
// 需要重构方法
let averageDollarValue = function (cars) {
    let dollar_values = fp.map(function (car) {
        return car.dollar_value
    }, cars)
    return _average(dollar_values)
}
// 重构
let averageDollarValue2 = fp.flowRight(_average,fp.map(car => car.dollar_value))
// console.log('averageDollarValue',averageDollarValue(cars))
// console.log('averageDollarValue2',averageDollarValue2(cars))



// 练习4
// 使用flowRight写一个sanitzeNames()函数返回一个下划线连接的小写字符串，把数组中的name转换成这种新式
// 下划线连接   小写   数组中的name
// 条件代码
let _underscore = fp.replace(/\W+/g, '_')
// 函数代码
let sanitizeNames = fp.map(fp.flowRight(_underscore,fp.toLower,fp.prop('name')))
// console.log(sanitizeNames(cars))



// 思考   如何返回原数组  并改变其中的name  为 小写   下划线连接
let _carNameExChange = function (car) {
    const _name = fp.flowRight(_underscore,fp.toLower)(car.name) 
    car.name = _name
    return car
}
let exChangeNames = fp.map(_carNameExChange)

// console.log(exChangeNames(cars))